package cn.rengy.web.framework.shiro;
//package com.uniontrip.framework.shiro;
//
//import java.security.MessageDigest;
//
//import org.apache.shiro.crypto.SecureRandomNumberGenerator;
//import org.apache.shiro.crypto.hash.DefaultHashService;
//import org.apache.shiro.crypto.hash.Hash;
//import org.apache.shiro.crypto.hash.HashRequest;
//import org.apache.shiro.util.ByteSource;
//import org.springframework.stereotype.Component;
///**
// * 密码和盐分开存储的实现方式
// * shiro默认实现DefaultPasswordService
// * 
// * @author rengy
// *
// */
//@Component
//public class IPasswordService {
//
//	private ByteSource privateSalt=ByteSource.Util.bytes("uniontrip");
//	private DefaultHashService hashService=new DefaultHashService();
//	
//	public IPasswordService(){
//		SecureRandomNumberGenerator secureRandomNumberGenerator=new SecureRandomNumberGenerator();
//		secureRandomNumberGenerator.setDefaultNextBytesSize(64);
//    	hashService.setHashAlgorithmName("SHA-512");
//    	hashService.setPrivateSalt(privateSalt); //私盐，默认无  ,如果存在私盐，必定生成公共盐来保护私盐的完整性
//    	hashService.setGeneratePublicSalt(true);//在用户没有传入公盐的情况下是否生成公盐，默认false
//    	hashService.setRandomNumberGenerator(secureRandomNumberGenerator);//用于生成公盐。默认就这个  
//    	hashService.setHashIterations(3); //生成Hash值的迭代次数  
//	}
//	
//	/**
//	 * 加密 ,随机生成的公盐和自定义的私盐加密
//	 * @param plaintextPassword 明文
//	 * @return
//	 */
//	public Hash encryptPassword(String plaintextPassword){
//		HashRequest request = new HashRequest.Builder()
//	            .setSource(ByteSource.Util.bytes(plaintextPassword))  
//	            .build();
//		return hashService.computeHash(request);
//	}
//	
//	/**
//	 * 验证密码 加密密码和公盐一般从数据库获取
//	 * @param submittedPlaintext 用户提交的明文密码
//	 * @param encrypted 加密密码
//	 * @param publicSalt 公盐
//	 * @return
//	 */
//	public boolean passwordMatch(String submittedPlaintext, ByteSource saved,ByteSource publicSalt) {
//		HashRequest request = new HashRequest.Builder()
//	            .setSource(ByteSource.Util.bytes(submittedPlaintext))
//	            .setSalt(publicSalt)
//	            .build();
//		Hash submitHash=hashService.computeHash(request);
//		return MessageDigest.isEqual(submitHash.getBytes(), saved.getBytes());
//	}
//}
